package com.relytosoft.mizar.media.analyze.services.service.face;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.relytosoft.dubhe.common.core.base.page.PageQuery;
import com.relytosoft.mizar.media.analyze.api.entity.face.AyFaceTask;
import com.relytosoft.mizar.media.analyze.api.entity.face.AyFaceTaskSon;
import com.relytosoft.mizar.media.analyze.api.pojo.dto.AyFaceTaskDto;
import com.relytosoft.mizar.media.analyze.api.pojo.query.AyFaceTaskQuery;
import com.relytosoft.mizar.media.analyze.api.pojo.vo.AyFaceTaskVo;
import com.relytosoft.mizar.media.analyze.api.pojo.vo.AyTaskSelectVo;

import java.util.List;

/**
 * @Author: zyc
 * @version: v1.0
 * @description: com.relytosoft.mizar.analyze.structure.services.service
 * @Date: 2022/5/12 15:42
 */
public interface AyFaceTaskService  extends IService<AyFaceTask> {

    /**
     *分页查询结构化分析主任务列表
     * @param pageQuery
     * @param ayFaceTaskQuery
     * @return
     */
    IPage<AyFaceTaskVo> selectAyFaceTaskPageList(PageQuery pageQuery, AyFaceTaskQuery ayFaceTaskQuery);

    /**
     * 添加任务：前置验证
     * @param ayFaceTaskDto
     * @return
     */
    Boolean addFrontVerify(AyFaceTaskDto ayFaceTaskDto);
    /**
     * 添加任务：构造子任务数据
     * @param ayFaceTaskDto
     * @return
     */
    List<AyFaceTaskSon> buildTaskSon(AyFaceTaskDto ayFaceTaskDto);

    boolean insertTaskWithSonWith(AyFaceTask ayFaceTask, List<AyFaceTaskSon> ayFaceTaskSonList);

    /**
     * 子任务联动处理主任务状态
     * @param id
     * @param newStatus
     */
    void taskStatusHandle(Integer id,Integer newStatus);


    /**
     * 删除异常子任务时联动更新主任务状态
     * @param id
     */
    void updateStatusByDeleteUnusual(Integer id);

    /**
     * 验证并构造删除任务数据
     * @param ids
     * @return
     */
    List<AyFaceTask> buildDeleteTask(List<Integer> ids);

    /**
     * 删除分析任务
     *
     * @param
     */
    void deleteTaskTrans(List<Integer> ids,List<AyFaceTask> deleteTaskList);

    /**
     * 任务启动：前置验证
     * @param ids
     * @return
     */
    boolean startTaskFrontVerify(List<Integer> ids);

    /**
     * 获取可启动的子任务
     * @param ids
     * @return
     */
    List<AyFaceTaskSon> selectCanStartTaskSonList(List<Integer> ids);

    /**
     * 获取可停止的子任务
     * @param ids
     * @return
     */
    List<AyFaceTaskSon> selectCanStopTaskSonList(List<Integer> ids);

    /**
     * 任务启动
     * @param ayFaceTask
     * @param deleteTaskSons
     * @param insertTaskSons
     * @param startTaskSons
     * @return
     */
    boolean startTaskWithSon(AyFaceTask ayFaceTask,List<AyFaceTaskSon> deleteTaskSons,List<AyFaceTaskSon> insertTaskSons,List<AyFaceTaskSon> startTaskSons);

    /**
     * 任务停止：前置验证
     * @param ids
     * @return
     */
    boolean stopTaskFrontVerify(List<Integer> ids);

    /**
     * 任务停止
     * @param ayFaceTask
     * @param stopTaskSons
     * @return
     */
    boolean stopTaskWithSon(AyFaceTask ayFaceTask,List<AyFaceTaskSon> stopTaskSons);
    /**
     * 更新子任务的任务名称
     * @param id
     * @param taskName
     */
    void updateSonTaskName(Integer id,String taskName);

    /**
     * 获取未删除的任务列表用于检索时选择任务
     * @return
     */
    List<AyTaskSelectVo> selectTaskList();
}
